1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 import com.sun.jdi.*;
36 import com.sun.jdi.event.*;
37 import com.sun.jdi.request.*;
38
39 import java.util.*;
40
41
42
43
44
45 interface AccessSpecifierPackagePrivateInterface {}
46
47
48 class AccessSpecifierPackagePrivateClass {}
49
50
51 class AccessSpecifierPackagePrivateClassTwo implements
52 AccessSpecifierPackagePrivateInterface {}
53
54 class AccessSpecifierTarg {
55 private boolean z0;
56 boolean z1[]={z0}, z2[][]={z1};
57
58 public byte b0;
59 byte b1[]={b0}, b2[][]={b1};
60
61 protected short s0;
62 short s1[]={s0}, s2[][]={s1};
63
64 int i0;
65 int i1[]={i0}, i2[][]={i1};
66
67 private long l0;
68 long l1[]={l0}, l2[][]={l1};
69
70 public char c0;
71 char c1[]={c0}, c2[][]={c1};
72
73 protected float f0;
74 float f1[]={f0}, f2[][]={f1};
75
76 double d0;
77 double d1[]={d0}, d2[][]={d1};
78
79 Boolean Z0 = Boolean.TRUE;
80 Boolean Z1[]={Z0}, Z2[][]={Z1};
81 Byte B0 = new Byte ((byte)0x1f);
82 Byte B1[]={B0}, B2[][]={B1};
83 Character C0 = new Character ('a');
84 Character C1[]={C0}, C2[][]={C1};
85 Double D0 = new Double (1.0d);
86 Double D1[]={D0}, D2[][]={D1};
87 Float F0 = new Float (2.0f);
88 Float F1[]={F0}, F2[][]={F1};
89 Integer I0 = new Integer (8675309);
90 Integer I1[]={I0}, I2[][]={I1};
91 Long L0 = new Long (973230999L);
92 Long L1[]={L0}, L2[][]={L1};
93 String S0 = "A String";
94 String S1[]={S0}, S2[][]={S1};
95 Object O0 = new Object();
96 Object O1[]={O0}, O2[][]={O1};
97
98 private static class U {}
99 protected static class V {}
100 public static class W {}
101 static class P {}
102
103 U u0=new U(), u1[]={u0}, u2[][]={u1};
104 V v0=new V(), v1[]={v0}, v2[][]={v1};
105 W w0=new W(), w1[]={w0}, w2[][]={w1};
106 P p0=new P(), p1[]={p0}, p2[][]={p1};
107
108 private static interface StaticInterface {}
109 private static class ClassUsingStaticInterface
110 implements StaticInterface {}
111
112 StaticInterface staticInterface_0 = new ClassUsingStaticInterface();
113 StaticInterface staticInterface_1[]={staticInterface_0};
114 StaticInterface staticInterface_2[][]={staticInterface_1};
115
116 AccessSpecifierTarg a0, a1[]={a0}, a2[][]={a1};
117
118 AccessSpecifierPackagePrivateClass ppc0=new AccessSpecifierPackagePrivateClass();
119 AccessSpecifierPackagePrivateClass ppc1[]={ppc0};
120 AccessSpecifierPackagePrivateClass ppc2[][]={ppc1};
121
122 AccessSpecifierPackagePrivateInterface ppi0 =
123 new AccessSpecifierPackagePrivateClassTwo ();
124 AccessSpecifierPackagePrivateInterface ppi1[]={ppi0};
125 AccessSpecifierPackagePrivateInterface ppi2[][]={ppi1};
126
127 public AccessSpecifierTarg() {
128 super();
129 }
130
131 public void ready(){
132 System.out.println("Ready!");
133 }
134
135 public static void main(String[] args){
136 System.out.println("Howdy!");
137 AccessSpecifierTarg my = new AccessSpecifierTarg();
138 my.ready();
139 System.out.println("Goodbye from AccessSpecifierTarg!");
140 }
141 }
142
143
144
145 public class AccessSpecifierTest extends TestScaffold {
146
147 private final static String debugeeName = "AccessSpecifierTarg";
148
149
150 private static final int NAME = 0;
151 private static final int ACCESS = 1;
152 private final static String primitives[][] = {
153 {"z", "private", "public", "public"},
154 {"b", "public", "public", "public"},
155 {"s", "protected", "public", "public"},
156 {"i", "package private", "public", "public"},
157 {"l", "private", "public", "public"},
158 {"c", "public", "public", "public"},
159 {"f", "protected", "public", "public"},
160 {"d", "package private", "public", "public"},
161 };
162 private final static String references[][] = {
163 {"java.lang.Boolean" , "public"},
164 {"java.lang.Character", "public"},
165 {"java.lang.Class" , "public"},
166 {"java.lang.Double" , "public"},
167 {"java.lang.Float" , "public"},
168 {"java.lang.Integer" , "public"},
169 {"java.lang.Long" , "public"},
170 {"java.lang.String" , "public"},
171 {"java.lang.Object" , "public"},
172
173 {"AccessSpecifierTarg", "package private"},
174 {"AccessSpecifierPackagePrivateClass", "package private"},
175 {"AccessSpecifierPackagePrivateInterface", "package private"},
176
177 {"AccessSpecifierTarg$StaticInterface", "private"},
178
179 {"AccessSpecifierTarg$U", "private"},
180 {"AccessSpecifierTarg$V", "protected"},
181 {"AccessSpecifierTarg$W", "public"},
182 {"AccessSpecifierTarg$P", "package private"}
183 };
184
185 AccessSpecifierTest (String args[]) {
186 super(args);
187 }
188
189 public static void main(String[] args) throws Exception {
190 new AccessSpecifierTest (args).startTests();
191 }
192
193
194
195 private void testAccessible (String name, Accessible a,
196 boolean isPublic, boolean isProtected,
197 boolean isPrivate, boolean isPackagePrivate) {
198 System.out.println (" Testing: " + name + " modifiers = " +
199 Integer.toBinaryString(a.modifiers()));
200 if (a.isPublic() != isPublic) {
201 failure("**Name = " + name + " expecting: " + isPublic +
202 " isPublic() was: " + a.isPublic());
203 }
204 if (a.isPrivate() != isPrivate) {
205 failure("**Name = " + name + " expecting: " + isPrivate +
206 " isPrivate() was: " + a.isPrivate());
207 }
208 if (a.isProtected() != isProtected) {
209 failure("**Name = " + name + " expecting: " + isProtected +
210 " isProtected() is: " + a.isProtected());
211 }
212 if (a.isPackagePrivate() != isPackagePrivate) {
213 failure("**Name = " + name + " expecting: " + isPackagePrivate +
214 " isPackagePrivate() is: " + a.isPackagePrivate());
215 }
216 }
217
218 protected void runTests() throws Exception {
219
220
221
222 startTo(debugeeName, "ready", "()V");
223
224 ReferenceType rt = findReferenceType(debugeeName);
225 if (rt == null) {
226 throw new Exception ("ReferenceType not found for: " + debugeeName);
227 }
228 for (int i = 0; i < primitives.length; i++) {
229 for (int j = 0; j < 3; j++) {
230 String suffix = Integer.toString(j);
231 String fieldName = primitives[i][NAME] + suffix;
232 Field field = rt.fieldByName(fieldName);
233 if (field == null) {
234 throw new Exception ("Field not found for: " + fieldName);
235 }
236
237 Type t = field.type();
238 if (t instanceof ReferenceType) {
239 ReferenceType reft = (ReferenceType)t;
240 if (primitives[i][ACCESS + j].equals("public")) {
241 testAccessible(reft.name(), reft,
242 true, false, false, false);
243 } else if (primitives[i][ACCESS + j].equals("protected")) {
244 testAccessible(reft.name(), reft,
245 false, true, false, false);
246 } else if (primitives[i][ACCESS + j].equals("private")) {
247 testAccessible(reft.name(), reft,
248 false, false, true, false);
249 } else if (primitives[i][ACCESS + j].equals("package private")) {
250 testAccessible(reft.name(), reft,
251 false, false, false, true);
252 }
253 } else {
254 System.out.println (" Skipping " + t +
255 " (primitive scalar type)");
256 }
257 }
258 }
259
260 String brackets[] = {"[][]", "[]", ""};
261
262 for (int i = 0; i < references.length; i++) {
263 for (int j = 0; j < 3; j++) {
264 String suffix = brackets[j];
265 String referenceName = references[i][NAME] + suffix;
266 ReferenceType refType = findReferenceType(referenceName);
267 if (refType == null) {
268 System.out.println ("Skipping " + referenceName +
269 " (not found)");
270 } else {
271 if (references[i][ACCESS].equals("public")) {
272 testAccessible(refType.name(), refType, true, false, false, false);
273 } else if (references[i][ACCESS].equals("protected")) {
274 testAccessible(refType.name(), refType, false, true, false, false);
275 } else if (references[i][ACCESS].equals("private")) {
276 testAccessible(refType.name(), refType, false, false, true, false);
277 } else if (references[i][ACCESS].equals("package private")) {
278 testAccessible(refType.name(), refType, false, false, false, true);
279 }
280 }
281 }
282 }
283
284
285
286
287 listenUntilVMDisconnect();
288
289
290
291
292
293 if (!testFailed) {
294 println("AccessSpecifierTest: passed");
295 } else {
296 throw new Exception("AccessSpecifierTest: failed");
297 }
298 }
299 }